package com.yckj.dao;

import cn.hutool.db.Db;
import com.myq.domain.User;
import com.myq.util.DbUtilHikari;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import cn.hutool.crypto.SecureUtil;

/**
 * 用户注册：增加用户 删除用户 修改用户 查询用户
 * @version 1.0
 * @author amber
 */

public class UserDao {
    /**
     *
     * @return
     */
    public List<User> selectAllUser(){
//        创建一个空集合来放用户对象
        List<User> userList = new ArrayList<User>();

        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;

        conn = DbUtilHikari.getConnection();
        String sql = "SELECT userid,username,userpsw FROM users";
        try {
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();
//        把rs里面的数据转移到userList集合里面
            while(rs.next()){
    //            user当前是空的，
                User user = new User();
    //            这个userid是表里面的字段
                user.setUserid(rs.getInt("userid"));
                user.setUsername(rs.getString("username"));
                user.setUserpsw(rs.getString("userpsw"));
                userList.add(user);

            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DbUtilHikari.close(rs,pstmt,conn);
        }
        return userList;

    }

    /**
     * 修改用户信息
     * @param userid 用户编号
     * @param uname 用户名
     * @param upsw 密码
     * @return 1/0
     */
    public int updataUser(int userid,String uname,String upsw){
        int flag = 0;
        Connection conn=null;
        PreparedStatement pstmt = null;
        conn = DbUtilHikari.getConnection();
        String sql = "UPDATE users SET username=?,userpsw=? WHERE userid=?";
        try {
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1,uname);
            pstmt.setString(2,SecureUtil.md5(upsw));
            pstmt.setInt(3,userid);
            flag = pstmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DbUtilHikari.close(pstmt,conn);
        }
        return flag;
    }
    /**
     * 按照用户编号删除用户
     * @param userid 用户编号
     * @return 删除成功返回1，否则返回0
     */
    public int deleteUser(int userid){
        int flag = 0;
//        生命一些变量
        Connection conn=null;
        PreparedStatement pstmt=null;
//        获取数据库连接
        conn = DbUtilHikari.getConnection();
//        定义并准备SQL语句
        String sql = "DELETE FROM users WHERE userid=?";
        try {
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1,userid);
            flag = pstmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
//            guanbiziyuan
            DbUtilHikari.close(pstmt,conn);
        }
        return flag;
    }
    /**
     * 按用户名和密码登录
     * @param uname 用户名
     * @param upsw 密码
     * @return 如果登陆成功，但会true，否则返回false;
     */
    public boolean login(String uname,String upsw) {
//         flag是登陆成功与否的标志，true就是登陆成功。
        boolean flag = false;
        Connection conn = null;
//         pstmt是执行SQL语句的
        PreparedStatement pstmt = null;
//         rs代表结果集，从数据库表里查到的结果放在rs里面
        ResultSet rs = null;
//         获得数据连接,从连接池里获取  连接池--connection pool 而不是直接从数据库打开链接
//         这样可以提高数据库访问性能
        conn = DbUtilHikari.getConnection();
//         定义并准备SQL语句 登录是查询语句  规定字段是大写
        String sql = "SELECT * FROM users WHERE username=? AND userpsw=?";
        try {
            pstmt = conn.prepareStatement(sql);
//         给问好赋值
            pstmt.setString(1, uname);
            pstmt.setString(2, SecureUtil.md5(upsw));
//        下达执行指令
            rs = pstmt.executeQuery();
//        判断rs结果集里有无数据 .next来判断--true则有数据，表明查到数据
            if (rs.next()){
                flag = true;
            }else{
                flag = false;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
//            关闭资源
            DbUtilHikari.close(rs,pstmt,conn);
        }
        return flag;
    }

    /**
     * 用户注册
     * @param uname 用户名
     * @param upsw 用户密码
     * @return 注册成功返回1
     */
    public int insertUser(String uname,String upsw){
//        １.声明一些变量备用
//        代表数据库连接
        Connection conn ;
//        预编译对象，用ptsmt来执行SQL语句
        PreparedStatement pstmt=null;
//
        int flag = 0;
//        2.获取数据库连接
        conn = DbUtilHikari.getConnection();
//        3.定义并准备SQL语句
        String sql = "INSERT INTO users(username,userpsw) VALUES(?,?)";
        try {
            pstmt = conn.prepareStatement(sql);
//        4.给问号赋值
            pstmt.setString(1,uname);
            pstmt.setString(2,SecureUtil.md5(upsw));
//        5.执行SQL语句，下达执行命令
            flag=pstmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
//        6.关闭数据库资源
            DbUtilHikari.close(pstmt,conn);
        }

        return flag;
    }
}
